When attempting to increase performance for Graphics Processing Units (GPUs), one important method is applying various techniques to reduce memory bandwidth consumption, i.e. the bandwidth required between the memory and the GPU. Bandwidth reduction is also becoming increasingly important as the performance growth rate for processing power is much larger than performance growth for bandwidth and latency for Random Access Memories (RAMs).
Although it is sometimes possible to trade computations for memory accesses, for example by computing the value of functions rather than accessing pre-computed lookup-tables, it is likely that at some point the computation needs are satisfied, leaving the GPU idly waiting for memory access requests. Additionally, a brute force approach of simply duplicating memory banks and increasing the number of pins on memory chips may not be feasible in the long run. Finally, transferring data between the GPU and the RAM consumes large amounts of power, which is a problem, especially in mobile applications. Because of that, memory bandwidth reduction algorithms are an important area of future research.
One type of images used in graphics applications is referred to as textures. A texture is just a regular image that is used to represent the surface of a graphics primitive such as a triangle, or a quadrilateral (quad). Texture compression is one popular way of reducing bandwidth requirements. By storing textures in compressed form in memory and transferring blocks of this compressed data over the bus, texture bandwidth is substantially reduced.
Today, S3TC or DXTC [1] is a widely spread texture compression scheme that compresses texture or texel blocks of 4×4 texture elements (texels) from 384 bits to 64 bits by storing two base colors for each texel block and two bits per texel for selecting either one of the base colors or one of two colors interpolated between the base colors.
Another common texture compression scheme is ETC [2], which also targets a size of 64 bits per texel block and stores two base colors for each texel block. Unlike S3TC/DXTC, however, ETC splits the block in two and uses one of the base colors for each half. In addition, each half will use three bits to select one of eight modifier tables or sets comprising four intensity modifiers each. Finally, each texel in the texel block uses two bits to select one of the four intensity modifiers from the chosen modifier set for the relevant half of the block.
Although ETC on average outperforms S3TC it still has a limitation in that even though each half of the texel block can effectively handle texels with different luminance only a single chrominance is assigned per block half.
There is therefore still a need for texture compression and decompression systems and in particular such systems that are able to improve the chrominance processing for ETC.